package src.ee.ioc.smaug.world.evolution;

public enum Parameter {
    /**
     * Moore machine with exact number of states
     */
    MOORE_MACHINE_FIXED(0, "Moore Machine with static number of states", "Type"),
    /**
     * Mealy machine with exact number of states
     */
    MEALY_MACHINE_FIXED(1, "Mealy Machine with static number of states", "Type"),
    /**
     * Moore machine with exact number of states
     */
    MOORE_MACHINE_MAX(2, "Moore Machine with dynamic number of states", "Type"),
    /**
     * Roulette Wheel Selection
     */
    ROULETTE_WHEEL_SELECTION(20, "Roulette Wheel Selection", "Selection"),

    /**
     * One point crossover
     */
    ONE_POINT_CROSSOVER(30, "One point crossover", "Crossover"),
    /**
     * Two point crossover
     */
    TWO_POINT_CROSSOVER(31, "Two point crossover", "Crossover"),

    /**
     * One point mutation
     */
    MUTATION(50, "One point mutation", "Mutation"),
    /**
     * Inversion
     */
    INVERSION(51, "Inversion", "Mutation"),
    /**
     * Hamming distance similarity
     */
    HAMMING_DISTANCE(60, "Hamming distance similarity", "Fitness measuring"),
    /**
     * Maximal length of equal prefixes
     */
    MAX_PREFIX(61, "Maximal length of equal prefixes", "Fitness measuring"),
    /**
     * Genereting in binary form
     */
    GENERATING_BIN(70, "Generating in binary form", "Generating"),
    /**
     * Generating in decimal form
     */
    GENERATING_DEC(71, "Generating in decimal form", "Generating");

    /**
     * Unique id
     */
    final int code;

    /**
     * Name
     */
    final String name;

    /**
     * Description
     */
    final String description;

    public String getDescription() {
        return description;
    }

    public String getName() {
        return name;
    }

    /**
     * Initialization
     * @param code unique id
     * @param name name of parameter
     * @param description of the parameter
     */
    Parameter(int code, String name, String description) {
        this.code = code;
        this.name = name;
        this.description = description;
    }
    

}
